// function Car(color,brand) {
//   // var this : {
//   //   color : color;
//   //   brand : brand;
//   // }
//   this.color = color
//   this.brand = brand
//   // return this
// }
// // new 会自动var this 并且隐式返回
// var car = new Car('blur','benz');
// console.log(car.color,car.brand);


// function Car(color,brand) {
//   let me = {}
//   me.color = color
//   me.brand = brand
//   return me
// }

// var car = Car('red','Mazda')

// function Car() {
//   this.color = color
//   this.brand = brand

//   return abc // return 原始值 不会执行 这里只能返回引用值类型
// }

// 包装类
// 原始值没有自己的方法和属性
// var a = 1 //原始值
// var b = new Number(a); // 经历过new Number 就变成了一个对象，那么可以给这个变量添加属性和方法
// console.log(b);

// new Number String Boolean
// var test = new Number(undefined)  // NAN

// console.log(undefined.length); //error
// var a = 123; 
// a.length = 3;
// // new Number(123)en = 3; delete
// console.log(a.length);//undefined 

// var str = 'abc'
// console.log(str.length);//3

var str = 'abc'

// console.log(new String(str).length); 经过包装才有了.length属性

// 如果想要保存 那么定义一个变量，接收数据  并给需要的值 new String（）来进行包装

function foo(x) {
  console.log(arguments); //1,2,3,4,5
  return x;
}
foo(1,2,3,4,5)

function foo(x) {
  console.log(arguments);  //函数声明不能跟执行符号()
  return x;
}(1,2,3,4,5)

(function foo(x) {
  console.log(arguments);//1,2,3,4,5
  return x
})(1,2,3,4,5)


function b(x, y, a) {
  a = 10
  console.log(arguments[2]); 
}

b(1,2,3)  // 10